package org.mbcorp.sar.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.mbcorp.sar.dao.SolicitanteDAO;
import org.mbcorp.sar.model.Solicitante;
import org.mbcorp.sar.service.SolicitanteService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class SolicitanteServiceImpl implements SolicitanteService {

	@Autowired
    private MessageSource message;
	
	private static final Logger LOGGER = LoggerFactory
			.getLogger(SolicitanteServiceImpl.class);

	@Resource
	private SolicitanteDAO solicitanteDAO;

	@Transactional
	@Override
	public Solicitante grabar(Solicitante created) {
		LOGGER.debug("Creando nuevo solicitante con informacion: " + created);

		return solicitanteDAO.save(created);
	}

	@Override
	public Solicitante eliminar(Integer solicitanteId)
			throws RuntimeException {
		LOGGER.debug("Eliminando solicitante con id: " +  solicitanteId);

		Solicitante eliminado =  solicitanteDAO.findOne(solicitanteId);

		if (eliminado == null) {
			LOGGER.debug("No se encontro solicitante con id: " + solicitanteId);
			throw new RuntimeException();
		}

		solicitanteDAO.delete(eliminado);
		return eliminado;
	}

	@Transactional(readOnly = true)
	@Override
	public List<Solicitante> buscarTodos() {
		LOGGER.debug("Buscando todos las solicitantes");
		return solicitanteDAO.findAll();
	}

	@Transactional(readOnly = true)
	@Override
	public Solicitante buscarPorId(Integer id) {
		LOGGER.debug("Buscando solicitante con id: " + id);
		return solicitanteDAO.findOne(id);
	}

	@Transactional
	@Override
	public Solicitante actualizar(Solicitante actualizado)
			throws RuntimeException {
		LOGGER.debug("Actualizando solicitante con informacion: " + actualizado);

		Solicitante solicitante = solicitanteDAO.findOne(actualizado.getId());

		if (solicitante == null) {
			LOGGER.debug("No se encontro solicitante con id: "
					+ actualizado.getId());
			throw new RuntimeException();
		}

		return solicitante;
	}

	@Override
	public List<Solicitante> buscarPorLogin(String login) {		
		return solicitanteDAO.buscarPorLogin(login);
	}

}
